队列: 先进先出
栈: 后进先出

1. 队列提供的三个方法

  • .put() -> 添加值到队列

import queue

q = queue.Queue()  # <queue.Queue object at 0x000002086EA71CC0>
q.put(1)
q.put(2)
q.put(3)

  • .get() -> 获取队列的值

import queue

q = queue.Queue()  # <queue.Queue object at 0x000002086EA71CC0>
q.put(1)
q.put(2)
q.put(3)
print(q.get())  # 1
print(q.get())  # 2
print(q.get())  # 3
print(q.get())  # 此时全部值已经被获取完了,如果再进行获取就会形成 阻塞 等待队列进入第4个值 类似于 input 如果没有值就一直在等到直到有值

  • .qsize() -> 获取此时队列还剩多少个值

import queue

q = queue.Queue()  # <queue.Queue object at 0x000002086EA71CC0>
q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
print(q.qsize())  # 1 以为队列已经被去了两个值所以还剩1个

2. queue.Queue() -> 先进先出 FIFO 

import queue

q = queue.Queue()

q.put('a')
q.put('b')
q.put('c')

print(q.qsize())  # 3

print(q.get())  # a
print(q.get())  # b
print(q.get())  # c

3. queue.LifoQueue() -> 后进先出

import queue

lfq = queue.LifoQueue()

lfq.put('a')
lfq.put('b')
lfq.put('c')

print(lfq.qsize())  # 3

print(lfq.get())  # c
print(lfq.get())  # b
print(lfq.get())  # a

4. queue.PriorityQueue() -> 根据权限输出,值越小越优先,值相同就根据 ascii 进行判断最小值先出

import queue

pq = queue.PriorityQueue()
pq.put((5, 'dd'))
pq.put((1, 'b'))
pq.put((1, 'aa'))

print(pq.qsize())  # 3

print(pq.get())  # (1, 'aa')
print(pq.get())  # (1, 'b')
print(pq.get())  # (5, 'dd')